package bogus.core;

import java.awt.Dimension;

public class CoreParams {
    /**Returns the maximum, and desired, number of frames per second. The system will attempt to call {@link #render()} at this rate.<br>
     * Unless the {@link #getStepRate()} method is overridden, {@link #step()} will also be called at this rate, and be given higher priority in case of slowdown.*/
    public final int targetFPS;
    /**The step rate of the Minigame implementation.<br> 
     * This must be a fixed number, and indicates how many game steps are executed per second.<br>
     * <br>
     * By default, this equals {@link #getMaxFrameRate()}, implying that the game should maintain a constant frame rate.*/
    public final int targetSPS;
    /**The length of one meter in the game world. Used for doppler effect calculations.*/
    public final float oneMeter;
    /**the width and the height of the screen, utilized to obtain proper mouse coordinates*/
    public final Dimension preferredMouseDimension;
    /**whether the system mouse should be visible when in the game window*/
    public final boolean mouseVisible;
    
    /**Default, 30Hz settings*/
    public CoreParams()
    {
	this(30);
    }
    /**Constant frame rate settings*/
    public CoreParams(int fps)
    {
	this(fps, fps);
    }
    /**Variable frame rate settings*/
    public CoreParams(int targetFPS, int targetSPS)
    {
	this(targetFPS, targetSPS, 1);
    }
    /**Variable frame rate settings with 3D sound*/
    public CoreParams(int targetFPS, int targetSPS, float oneMeter) {
	this(targetFPS, targetSPS, oneMeter, new Dimension(864, 486), false);
    }
    /**Variable frame rate settings with 3D sound and a non-default mouse dimension size*/
    public CoreParams(int targetFPS, int targetSPS, float oneMeter, Dimension preferredMouseDimension, boolean mouseVisible) {
	this.targetFPS = targetFPS;
	this.targetSPS = targetSPS;
	this.oneMeter = oneMeter;
	this.preferredMouseDimension = preferredMouseDimension;
	this.mouseVisible = mouseVisible;
    }
    
    
}
